package br.com.consignum.modelo.jdbc.empresa;

import java.io.Serializable;
import java.util.Date;

import br.com.consignum.annotation.Column;
import br.com.consignum.annotation.Table;
import br.com.consignum.dao.util.TypesJDBC;
import br.com.consignum.modelo.jdbc.convenio.ConvenioVO;
import br.com.consignum.modelo.jdbc.pessoa.PessoaJuridicaVO;

/**
 * Classe que representa a Entidade de Empresa.
 * 
 * @author Programmer
 */
@Table( name = "empresa", schema = "global" )
public class EmpresaVO implements Serializable, Cloneable {

	private static final long serialVersionUID = 1L;

	@Column( value = "codigo" )
	private String codigo;

	private ConvenioVO convenio;

	@Column( value = "data_inclusao", type = TypesJDBC.TIMESTAMP )
	private Date dataInclusao;

	@Column( value = "descricao" )
	private String descricao;

	@Column( value = "dominio_ativo_inativo" )
	private String dominioAtivoInativo;

	@Column( value = "dominio_permite_emprestimo" )
	private String dominioPermiteEmprestimo;

	@Column( value = "id_empresa" )
	private Long id;

	@Column( value = "id_convenio" )
	private Long idConvenio;

	@Column( value = "id_pessoa" )
	private Long idPessoa;

	private PessoaJuridicaVO pessoaJuridica;

	@Override
	public boolean equals( Object obj ) {
		if ( this == obj )
			return true;
		if ( obj == null )
			return false;
		if ( getClass() != obj.getClass() )
			return false;
		EmpresaVO other = (EmpresaVO) obj;
		if ( codigo == null ) {
			if ( other.codigo != null )
				return false;
		} else if ( !codigo.equals( other.codigo ) )
			return false;
		if ( convenio == null ) {
			if ( other.convenio != null )
				return false;
		} else if ( !convenio.equals( other.convenio ) )
			return false;
		if ( dataInclusao == null ) {
			if ( other.dataInclusao != null )
				return false;
		} else if ( !dataInclusao.equals( other.dataInclusao ) )
			return false;
		if ( descricao == null ) {
			if ( other.descricao != null )
				return false;
		} else if ( !descricao.equals( other.descricao ) )
			return false;
		if ( dominioAtivoInativo == null ) {
			if ( other.dominioAtivoInativo != null )
				return false;
		} else if ( !dominioAtivoInativo.equals( other.dominioAtivoInativo ) )
			return false;
		if ( dominioPermiteEmprestimo == null ) {
			if ( other.dominioPermiteEmprestimo != null )
				return false;
		} else if ( !dominioPermiteEmprestimo.equals( other.dominioPermiteEmprestimo ) )
			return false;
		if ( id == null ) {
			if ( other.id != null )
				return false;
		} else if ( !id.equals( other.id ) )
			return false;
		if ( idConvenio == null ) {
			if ( other.idConvenio != null )
				return false;
		} else if ( !idConvenio.equals( other.idConvenio ) )
			return false;
		if ( idPessoa == null ) {
			if ( other.idPessoa != null )
				return false;
		} else if ( !idPessoa.equals( other.idPessoa ) )
			return false;
		if ( pessoaJuridica == null ) {
			if ( other.pessoaJuridica != null )
				return false;
		} else if ( !pessoaJuridica.equals( other.pessoaJuridica ) )
			return false;
		return true;
	}

	public String getCodigo() {
		return codigo;
	}

	public ConvenioVO getConvenio() {
		return convenio;
	}

	public Date getDataInclusao() {
		return dataInclusao;
	}

	public String getDescricao() {
		return descricao;
	}

	public String getDominioAtivoInativo() {
		return dominioAtivoInativo;
	}

	public String getDominioPermiteEmprestimo() {
		return dominioPermiteEmprestimo;
	}

	public Long getId() {
		return id;
	}

	public Long getIdConvenio() {
		return idConvenio;
	}

	public Long getIdPessoa() {
		return idPessoa;
	}

	public PessoaJuridicaVO getPessoaJuridica() {
		return pessoaJuridica;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ( ( codigo == null ) ? 0 : codigo.hashCode() );
		result = prime * result + ( ( convenio == null ) ? 0 : convenio.hashCode() );
		result = prime * result + ( ( dataInclusao == null ) ? 0 : dataInclusao.hashCode() );
		result = prime * result + ( ( descricao == null ) ? 0 : descricao.hashCode() );
		result = prime * result + ( ( dominioAtivoInativo == null ) ? 0 : dominioAtivoInativo.hashCode() );
		result = prime * result + ( ( dominioPermiteEmprestimo == null ) ? 0 : dominioPermiteEmprestimo.hashCode() );
		result = prime * result + ( ( id == null ) ? 0 : id.hashCode() );
		result = prime * result + ( ( idConvenio == null ) ? 0 : idConvenio.hashCode() );
		result = prime * result + ( ( idPessoa == null ) ? 0 : idPessoa.hashCode() );
		result = prime * result + ( ( pessoaJuridica == null ) ? 0 : pessoaJuridica.hashCode() );
		return result;
	}

	public void setCodigo( String codigo ) {
		this.codigo = codigo;
	}

	public void setConvenio( ConvenioVO convenio ) {
		this.convenio = convenio;
	}

	public void setDataInclusao( Date dataInclusao ) {
		this.dataInclusao = dataInclusao;
	}

	public void setDescricao( String descricao ) {
		this.descricao = descricao;
	}

	public void setDominioAtivoInativo( String dominioAtivoInativo ) {
		this.dominioAtivoInativo = dominioAtivoInativo;
	}

	public void setDominioPermiteEmprestimo( String dominioPermiteEmprestimo ) {
		this.dominioPermiteEmprestimo = dominioPermiteEmprestimo;
	}

	public void setId( Long id ) {
		this.id = id;
	}

	public void setIdConvenio( Long idConvenio ) {
		this.idConvenio = idConvenio;
	}

	public void setIdPessoa( Long idPessoa ) {
		this.idPessoa = idPessoa;
	}

	public void setPessoaJuridica( PessoaJuridicaVO pessoaJuridica ) {
		this.pessoaJuridica = pessoaJuridica;
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		final EmpresaVO empresa = ( EmpresaVO ) super.clone();
		if( convenio != null ){
			empresa.convenio  = ( ConvenioVO ) convenio.clone();
		}
		if( pessoaJuridica != null ){
			empresa.pessoaJuridica = ( PessoaJuridicaVO ) pessoaJuridica.clone();
		}
		
		return empresa;
	}
}
